home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / sound / fm.h < prev    next >
C/C++ Source or Header  |  2000-05-02  |  7KB  |  237 lines

  1. /*
  2.   File: fm.h -- header file for software emuration for FM sound genelator
  3.  
  4. */
  5. #ifndef _H_FM_FM_
  6. #define _H_FM_FM_
  7.  
  8. /* --- select emulation chips --- */
  9. #define BUILD_YM2203  (HAS_YM2203)        /* build YM2203(OPN)   emulator */
  10. #define BUILD_YM2608  (HAS_YM2608)        /* build YM2608(OPNA)  emulator */
  11. #define BUILD_YM2610  (HAS_YM2610)        /* build YM2610(OPNB)  emulator */
  12. #define BUILD_YM2610B (HAS_YM2610B)        /* build YM2610B(OPNB?)emulator */
  13. #define BUILD_YM2612  (HAS_YM2612)        /* build YM2612(OPN2)  emulator */
  14. #define BUILD_YM2151  (HAS_YM2151)        /* build YM2151(OPM)   emulator */
  15.  
  16. /* --- system optimize --- */
  17. /* select stereo output buffer : 1=mixing / 0=separate */
  18. #define FM_STEREO_MIX 0
  19. /* select bit size of output : 8 or 16 */
  20. #define FM_OUTPUT_BIT 16
  21. /* select timer system internal or external */
  22. #define FM_INTERNAL_TIMER 0
  23.  
  24. /* --- speedup optimize --- */
  25. /* support LFO unit */
  26. #define FM_LFO_SUPPORT 1
  27. /* support OPN SSG type envelope mode */
  28. #define FM_SEG_SUPPORT 0
  29.  
  30. /* --- external SSG(YM2149/AY-3-8910)emulator interface port */
  31. /* used by YM2203,YM2608,and YM2610 */
  32.  
  33. /* SSGClk   : Set SSG Clock      */
  34. /* int n    = chip number        */
  35. /* int clk  = MasterClock(Hz)    */
  36. /* int rate = sample rate(Hz) */
  37. #define SSGClk(chip,clock) AY8910_set_clock(chip,clock)
  38.  
  39. /* SSGWrite : Write SSG port     */
  40. /* int n    = chip number        */
  41. /* int a    = address            */
  42. /* int v    = data               */
  43. #define SSGWrite(n,a,v) AY8910Write(n,a,v)
  44.  
  45. /* SSGRead  : Read SSG port */
  46. /* int n    = chip number   */
  47. /* return   = Read data     */
  48. #define SSGRead(n) AY8910Read(n)
  49.  
  50. /* SSGReset : Reset SSG chip */
  51. /* int n    = chip number   */
  52. #define SSGReset(chip) AY8910_reset(chip)
  53.  
  54. /* --- external callback funstions for realtime update --- */
  55. #if BUILD_YM2203
  56.   /* in 2203intf.c */
  57.   #define YM2203UpdateReq(chip) YM2203UpdateRequest(chip)
  58. #endif
  59. #if BUILD_YM2608
  60.   /* in 2608intf.c */
  61.   #define YM2608UpdateReq(chip) YM2608UpdateRequest(chip);
  62. #endif
  63. #if BUILD_YM2610
  64.   /* in 2610intf.c */
  65.   #define YM2610UpdateReq(chip) YM2610UpdateRequest(chip);
  66. #endif
  67. #if BUILD_YM2612
  68.   /* in 2612intf.c */
  69.   #define YM2612UpdateReq(chip) YM2612UpdateRequest(chip);
  70. #endif
  71. #if BUILD_YM2151
  72.   /* in 2151intf.c */
  73.   #define YM2151UpdateReq(chip) YM2151UpdateRequest(chip);
  74. #endif
  75.  
  76. /* compiler dependence */
  77. #ifndef OSD_CPU_H
  78. #define OSD_CPU_H
  79. typedef unsigned char    UINT8;   /* unsigned  8bit */
  80. typedef unsigned short    UINT16;  /* unsigned 16bit */
  81. typedef unsigned int    UINT32;  /* unsigned 32bit */
  82. typedef signed char        INT8;    /* signed  8bit   */
  83. typedef signed short    INT16;   /* signed 16bit   */
  84. typedef signed int        INT32;   /* signed 32bit   */
  85. #endif
  86.  
  87. #define YM2203_NUMBUF 1
  88. #if FM_STEREO_MIX
  89.   #define YM2151_NUMBUF 1
  90.   #define YM2608_NUMBUF 1
  91.   #define YM2612_NUMBUF 1
  92.   #define YM2610_NUMBUF 1
  93. #else
  94.   #define YM2151_NUMBUF 2    /* FM L+R */
  95.   #define YM2608_NUMBUF 2    /* FM L+R+ADPCM+RYTHM */
  96.   #define YM2610_NUMBUF 2    /* FM L+R+ADPCMA+ADPCMB */
  97.   #define YM2612_NUMBUF 2    /* FM L+R */
  98. #endif
  99.  
  100. #if (FM_OUTPUT_BIT==16)
  101. typedef INT16 FMSAMPLE;
  102. typedef unsigned long FMSAMPLE_MIX;
  103. #endif
  104. #if (FM_OUTPUT_BIT==8)
  105. typedef unsigned char  FMSAMPLE;
  106. typedef unsigned short FMSAMPLE_MIX;
  107. #endif
  108.  
  109. typedef void (*FM_TIMERHANDLER)(int n,int c,int cnt,double stepTime);
  110. typedef void (*FM_IRQHANDLER)(int n,int irq);
  111. /* FM_TIMERHANDLER : Stop or Start timer         */
  112. /* int n          = chip number                  */
  113. /* int c          = Channel 0=TimerA,1=TimerB    */
  114. /* int count      = timer count (0=stop)         */
  115. /* doube stepTime = step time of one count (sec.)*/
  116.  
  117. /* FM_IRQHHANDLER : IRQ level changing sense     */
  118. /* int n       = chip number                     */
  119. /* int irq     = IRQ level 0=OFF,1=ON            */
  120.  
  121. #if BUILD_YM2203
  122. /* -------------------- YM2203(OPN) Interface -------------------- */
  123.  
  124. /*
  125. ** Initialize YM2203 emulator(s).
  126. **
  127. ** 'num'           is the number of virtual YM2203's to allocate
  128. ** 'baseclock'
  129. ** 'rate'          is sampling rate
  130. ** 'TimerHandler'  timer callback handler when timer start and clear
  131. ** 'IRQHandler'    IRQ callback handler when changed IRQ level
  132. ** return      0 = success
  133. */
  134. int YM2203Init(int num, int baseclock, int rate,
  135.                FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
  136.  
  137. /*
  138. ** shutdown the YM2203 emulators .. make sure that no sound system stuff
  139. ** is touching our audio buffers ...
  140. */
  141. void YM2203Shutdown(void);
  142.  
  143. /*
  144. ** reset all chip registers for YM2203 number 'num'
  145. */
  146. void YM2203ResetChip(int num);
  147. /*
  148. ** update one of chip
  149. */
  150.  
  151. void YM2203UpdateOne(int num, INT16 *buffer, int length);
  152.  
  153. /*
  154. ** Write
  155. ** return : InterruptLevel
  156. */
  157. int YM2203Write(int n,int a,unsigned char v);
  158. /*
  159. ** Read
  160. ** return : InterruptLevel
  161. */
  162. unsigned char YM2203Read(int n,int a);
  163.  
  164. /*
  165. **    Timer OverFlow
  166. */
  167. int YM2203TimerOver(int n, int c);
  168.  
  169. #endif /* BUILD_YM2203 */
  170.  
  171. #if BUILD_YM2608
  172. /* -------------------- YM2608(OPNA) Interface -------------------- */
  173. int YM2608Init(int num, int baseclock, int rate,
  174.                void **pcmroma,int *pcmsizea,short *rhythmrom,int *rhythmpos,
  175.                FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
  176. void YM2608Shutdown(void);
  177. void YM2608ResetChip(int num);
  178. void YM2608UpdateOne(int num, INT16 **buffer, int length);
  179.  
  180. int YM2608Write(int n, int a,unsigned char v);
  181. unsigned char YM2608Read(int n,int a);
  182. int YM2608TimerOver(int n, int c );
  183. #endif /* BUILD_YM2608 */
  184.  
  185. #if (BUILD_YM2610||BUILD_YM2610B)
  186. /* -------------------- YM2610(OPNB) Interface -------------------- */
  187. int YM2610Init(int num, int baseclock, int rate,
  188.                void **pcmroma,int *pcmasize,void **pcmromb,int *pcmbsize,
  189.                FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
  190. void YM2610Shutdown(void);
  191. void YM2610ResetChip(int num);
  192. void YM2610UpdateOne(int num, INT16 **buffer, int length);
  193. #if BUILD_YM2610B
  194. void YM2610BUpdateOne(int num, INT16 **buffer, int length);
  195. #endif
  196.  
  197. int YM2610Write(int n, int a,unsigned char v);
  198. unsigned char YM2610Read(int n,int a);
  199. int YM2610TimerOver(int n, int c );
  200.  
  201. #endif /* BUILD_YM2610 */
  202.  
  203. #if BUILD_YM2612
  204. int YM2612Init(int num, int baseclock, int rate,
  205.                FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
  206. void YM2612Shutdown(void);
  207. void YM2612ResetChip(int num);
  208. void YM2612UpdateOne(int num, INT16 **buffer, int length);
  209. int YM2612Write(int n, int a,unsigned char v);
  210. unsigned char YM2612Read(int n,int a);
  211. int YM2612TimerOver(int n, int c );
  212.  
  213. #endif /* BUILD_YM2612 */
  214.  
  215. #if BUILD_YM2151
  216. /* -------------------- YM2151(OPM) Interface -------------------- */
  217. int OPMInit(int num, int baseclock, int rate,
  218.                FM_TIMERHANDLER TimerHandler,FM_IRQHANDLER IRQHandler);
  219. void OPMShutdown(void);
  220. void OPMResetChip(int num);
  221.  
  222. void OPMUpdateOne(int num, INT16 **buffer, int length );
  223. /* ---- set callback hander when port CT0/1 write ----- */
  224. /* CT.bit0 = CT0 , CT.bit1 = CT1 */
  225. /*
  226. typedef void (*mem_write_handler)(int offset,int data);
  227. */
  228. void OPMSetPortHander(int n,mem_write_handler PortWrite);
  229. /* JB 981119  - so it will match MAME's memory write functions scheme*/
  230.  
  231. int YM2151Write(int n,int a,unsigned char v);
  232. unsigned char YM2151Read(int n,int a);
  233. int YM2151TimerOver(int n,int c);
  234. #endif /* BUILD_YM2151 */
  235.  
  236. #endif /* _H_FM_FM_ */
  237.